<script>-- This button will present a pop-up menu of stack names.-- Hold the mouse button down for a few seconds until-- the menu appears. Select one of the choices to-- go to that stack.on mouseDownif the commandKey is down thendoHelpexit mouseDownend if--global stackLastput true into useLastif the optionKey is down then put false into useLastif stackLast is empty thenput "1,1,1,1,1,1" into stackListput the rect of me into thePtif item 2 of thePt > 230 then put 230 into item 2 of thePtput "(Shows;Songs;Tapes;Labels;Stats;Utility" into listput popUp( thePt, list ) into choice-- if it is 0, then no choice was made...if choice is not 0 thenput piece( list, ";", choice ) into theStackif theStack is not "Songs" then put "Dead " before theStackset the hilite of me to falselock screengo stack theStackend ifend ifend mouseDown</script>
</part>
<part>
<id>17</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>439</left>
<top>125</top>
<right>498</right>
<bottom>153</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Next</name>
<script>-- This button sends you to the next card. Big whoop!---- However, if you hold down the optionKey when you click-- It will send you to the first card of the NEXT YEARon mouseDown---- The following does not seem to work right in HC 2.0---- go next card-- repeat while the mouse is down-- go to next card-- wait 1-- end repeatif the commandKey is down thendoHelpexit mouseDownend ifend mouseDownon mouseUpif the commandKey is down then-- do nuthin'else if the optionKey is down thenget field "date"convert it to dateItemsput item 1 of it into theYearadd 1 to theYeargoFirstCardOfYear theYearelsego next cardend ifend mouseUp</script>
</part>
<part>
<id>18</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>377</left>
<top>125</top>
<right>437</right>
<bottom>153</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Prev</name>
<script>-- This button sends you to the previous card.-- Like you couldn't figure that out by yourself :-)---- When you hold down the optionKey when you click-- It will send you to the first card of the THIS YEAR-- unless you are already on that card, in which case it-- will send you to the first card of the PREVIOUS YEAR.on mouseDown---- The following does not seem to work right in HC 2.0----go prev card--repeat while the mouse is down-- go to prev card--end repeatif the commandKey is down thendoHelpexit mouseDownend ifend mouseDownon mouseUpif the commandKey is down then-- do nuthin'else if the optionKey is down thenget field "date"convert it to dateItemsput item 1 of it into theYearput the id of this card into origCardIDgoFirstCardOfYear theYearif the id of this card is origCardID thensubtract 1 from theYeargoFirstCardOfYear theYearend ifelsego prev cardend ifend mouseUp</script>
</part>
<part>
<id>93</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>403</left>
<top>237</top>
<right>475</right>
<bottom>259</bottom>
</rect>
<style>shadow</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Utilities...</name>
<script>-- This button will present a palette menu of utility-- options. Select one of the choices to invoke the-- function...---- The utilities are:---- IMPORT SHOWS...---- This utility lets you import shows from a text file.-- I use this when I get a bunch of shows from NEWS-- or the WELL. The shows have to be in a specific format,-- a line with the date and location, followed by songs on-- individual lines, with blank lines separating the sets.-- It will also treat any line with an equal sign (=) in-- column 1 as a comment, stripping off the first character-- and appending it to the comment field.---- It will prompt you pick the input text file. It will also-- ask you if you want to validate and add the songs as they-- are input. This is a fairly slow process which cross-checks-- each song against the "Songs" stack. It also adds each song-- into the totals for the year on the song card.---- EXPORT SHOWS...---- This utility lets you dump a collection of shows to a-- test file. If you are passing the stacks around, it-- is actually more compact to pass around and empty-- shows stack and all the songs in text files, as the-- text files compress better.---- The function lets you dump on year or all years, to-- either a file or a list on the screen if you really-- want. You can select to dump just the date/location, with-- the song lists as well, and/or with the comments field.-- The format written is the acceptable input for the Import-- function.---- DELETE SHOWS...---- This utility allows you to specify a block or range-- of shows to delete. This is handy if you want to-- replace a block (like a years worth) with a text file-- which you know to be more acurate than what you already-- have.---- IMPORTANT!! You should make sure your stack is sorted-- by date before invoking this feature.on mouseupif the commandKey is down thendoHelpexit mouseUpend if--palette "Show Utilities", "380,200"end mouseUpon mouseDownxxxif the commandKey is down thendoHelpexit mouseDownxxxend if--put true into useLastif the optionKey is down then put false into useLastput the rect of me into thePtif item 2 of thePt > 300 then put 230 into item 2 of thePtput "Import Shows...;Export Shows...;Delete Shows..." into listput popUp( thePt, list ) into choice-- if it is 0, then no choice was made...set the hilite of me to falseif choice is not 0 thenput piece( list, ";", choice ) into commandif command is "Import Shows..." then ImportShowsif command is "Export Shows..." then ExportShowsif command is "Delete Shows..." then DeleteShowsend ifend mouseDownxxx</script>
</part>
<part>
<id>57</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>403</left>
<top>162</top>
<right>475</right>
<bottom>184</bottom>
</rect>
<style>shadow</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Go to...</name>
<script>-- This button will help you find a show by date. You can enter-- an explicit date, and it will try to find that show. You can-- enter just the month and day (mm/dd) and it will assume the-- same year as the current show.----Option Key---- If the option key is used, it will ask you for a year, and send-- you to the first card of that year by using an internal map of-- cards for first-of-year shows.on mouseUpif the commandKey is down thendoHelpelse if the optionKey is down thengoToYearelsegoToDateend ifend mouseUpon goToDate--goto card function-- requests destination from the user. input of the form-- .[+,-]nn jumps relative +- nn cards e.g. .-20 goes back 20 cards-- mm/dd/yy goes to the show date, if it exists--put the number of this card into origCardask "Enter the show date: "if it is empty then exit goToDateif char 1 of it is "." thenput char 3 to the number of chars in it of it into relJumpif char 2 of it is "-" thenput the number of this card - relJump into newCardgo card newCardelse if char 2 of it is "+" thenput the number of this card + relJump into newCardgo card newCardend ifelseif piece( it, "/", 3 ) is empty thenput "/" & piece( field "date", "/", 3 ) after itput itend ifput it into theShowput findShowByDate( theShow ) into foundItif foundIt is false thenanswer "Show date not found !"end ifhide messageend ifend goToDateon goToYearask "First card of Year: "if it is empty then exit goToYeargoFirstCardOfYear itend goToYearon planA -- brute force FINDask "Enter the show date: "if it is empty then exit planAput it into theShowconvert it to secondsif it is theShow thenfind theShow -- in field "date"elseconvert theShow to short dateput the long time into startTimefind theShow -- in field "date"put the long time into endTimeconvert startTime to secondsconvert endTime to secondsanswer "Took " & endTime-startTime & " seconds!"end ifif the result is not empty thenset the cursor to 4set the lockScreen to trueconvert theShow to secondsrepeat for the number of cardsget field "date"convert it to secondsif it >= theShow then exit repeatgo next cardend repeatend ifend planA</script>
</part>
<part>
<id>60</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>403</left>
<top>187</top>
<right>475</right>
<bottom>209</bottom>
</rect>
<style>shadow</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Find...</name>
<script>-- This button is a quick way to get to the find command.-- It will search everywhere on the cards for whatever you-- want. This is the way to find a particular song. If you-- want to find a show by the date, it is faster to use-- the "Go to..." button.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--doMenu "Find..."end mouseUp</script>
</part>
<part>
<id>78</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>403</left>
<top>212</top>
<right>475</right>
<bottom>234</bottom>
</rect>
<style>shadow</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Search...</name>
<script>-- This button will send you to the standard search utility-- which will allow you to search for a group of songs. You-- can search for an exact sequence, or any show which has all-- the songs. This is handy for identifying those "mystery-- tapes". You can even search for a sequence that opens or-- closes a set.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--searchend mouseUp</script>
</part>
<part>
<id>16</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>468</left>
<top>314</top>
<right>505</right>
<bottom>342</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>1012</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Return</name>
<script>-- This button pops a card. It will send you to the last place-- where a card was pushed.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--visual effect iris closepop cardend mouseUp</script>
</part>
<part>
<id>45</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>396</left>
<top>318</top>
<right>421</right>
<bottom>341</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>20689</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Home</name>
<script>-- This button sends you to the Home stack.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--lock screengo stack "Dead Utility"playDeadSong "Franklins"go "Home"unlock screen with visual effect iris closeend mouseUp</script>
</part>
<part>
<id>48</id>
<type>field</type>
<visible> <true /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <false /> </sharedText>
<fixedLineHeight> <true /> </fixedLineHeight>
<autoTab> <true /> </autoTab>
<lockText> <false /> </lockText>
<rect>
<left>77</left>
<top>48</top>
<right>197</right>
<bottom>67</bottom>
</rect>
<style>transparent</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <false /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>12</textSize>
<textStyle>bold</textStyle>
<textHeight>16</textHeight>
<name>date</name>
<script></script>
</part>
<part>
<id>50</id>
<type>field</type>
<visible> <true /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <false /> </sharedText>
<fixedLineHeight> <true /> </fixedLineHeight>
<autoTab> <false /> </autoTab>
<lockText> <true /> </lockText>
<rect>
<left>87</left>
<top>110</top>
<right>294</right>
<bottom>329</bottom>
</rect>
<style>scrolling</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <false /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>9</textSize>
<textStyle>plain</textStyle>
<textHeight>12</textHeight>
<name>songs</name>
<script>on mouseDownglobal selectedSongput word 2 of the clickLine into songLineif line songLine of field "songs" is empty thenhideTheHiliteexit mouseDownend ifif line songLine of field "songs" is selectedSong thengotoSong selectedSongelsehiliteLine songLineend ifend mouseDownon gotoSong theSonglock screenset cursor to watchpush this cardif theSong is not empty thengo to stack "Songs"find theSong in field "title"if the result is empty thenput the id of this card into firstCardrepeat foreverif field "title" is theSong then exit gotoSonggo next cardfind theSong in field "title"if the id of this card is firstCard thenplay boingset the lockScreen to trueput "Well, it's close... :-}"exit gotoSongend ifend repeatend ifend ifplay "boing"pop cardend gotoSongon XXXput the selectedText into lastSelectionput the rect of me into myBoxput the textHeight of me into lineHeightput item 2 of myBox into topLineput trunc((item 1 of myBox) + ((item 3 of myBox - item 1 of myBox)/2)) - 8 into centerput the clickLoc into theLocput trunc(((item 2 of theLoc - topLine) + ¬the scroll of me) /lineHeight) + 1 into showLineput topLine + (((showLine - 1) * lineHeight) - the scroll of me) ¬+ 6 into fldLine--put line showLine of me into theShowif theShow is lastSelection thenput the id of this card into origCardput word 1 of theShow into theDateset the lockScreen to trueset the cursor to 4go stack "Dead Shows"put findShowByDate( theDate ) into foundItif foundIt is false thenanswer "Show not found!!"go card id origCardend ifexit XXXend ifif theShow is empty thenselect emptyelseselect line showLine of meend ifend XXX</script>
</part>
<part>
<id>51</id>
<type>field</type>
<visible> <true /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <false /> </sharedText>
<fixedLineHeight> <true /> </fixedLineHeight>
<autoTab> <false /> </autoTab>
<lockText> <false /> </lockText>
<rect>
<left>77</left>
<top>25</top>
<right>504</right>
<bottom>45</bottom>
</rect>
<style>transparent</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <false /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>12</textSize>
<textStyle>bold</textStyle>
<textHeight>16</textHeight>
<name>location</name>
<script>on mouseUpif the optionKey is down thenbeep 2end ifend mouseUp</script>
</part>
<part>
<id>52</id>
<type>field</type>
<visible> <true /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <false /> </sharedText>
<fixedLineHeight> <true /> </fixedLineHeight>
<autoTab> <false /> </autoTab>
<lockText> <true /> </lockText>
<rect>
<left>308</left>
<top>49</top>
<right>363</right>
<bottom>68</bottom>
</rect>
<style>transparent</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <false /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>12</textSize>
<textStyle>bold</textStyle>
<textHeight>16</textHeight>
<name>total songs</name>
<script>on mouseUpset the cursor to watchput countSongs() into meend mouseUp</script>
</part>
<part>
<id>54</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>309</left>
<top>119</top>
<right>360</right>
<bottom>151</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Tapes</name>
<script>-- This button sends you to the Dead Tapes stack. It looks for a-- card for a tape for the current show. If not found, it will-- offer to create one for you, filling in the date and location.-- You can do that, cancel, or just go to the Tapes stack without-- bothering to create the new card.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--global listDate, labelList, listVenueput field "date" into listDateput field "location" into listVenueput field "songs" into labelListlock screenpush this cardgo to "Dead Tapes"if findTapeByDate( listDate ) is false thenanswer "No tape yet. Set one up?" with "Cancel" or¬"OK" or "Don't Bother"if it is "Cancel" thenpop cardexit mouseUpelse if it is "OK" thendoMenu "New Card"put listDate into field "date"put listVenue into field "location"unlock screenclick at the loc of field "source"end ifend ifend mouseUp</script>
</part>
<part>
<id>58</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>411</left>
<top>66</top>
<right>466</right>
<bottom>122</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>hey now</name>
<script>-- This button plays a random tune.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--singAndDanceend mouseUp</script>
</part>
<part>
<id>59</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>21</left>
<top>195</top>
<right>51</right>
<bottom>238</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>bbd</name>
<script>-- This button will tell you what I think of the Grateful Dead.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if---- not any more... go to bg script to send you to wherever-- it decides. Makes it easy to keep the sounds wherever you want.-- go to "Dead Utility"playDead "bbd"end mouseUp</script>
</part>
<part>
<id>63</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>318</left>
<top>160</top>
<right>353</right>
<bottom>190</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>128</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Labels</name>
<script>-- This button sends you to the Dead Labels stack. It looks for a-- card with a label for the current show. If not found, it will-- offer to create a set of labels for you, filling in the date,-- location, and the songs from sets 1 and two. The current format-- starts the second set on the second label card. It puts the-- tape flip after the sixth song for each set.---- If you don't want to create the labels, you can cancel, or-- just go to the Tapes stack without bothering to create the-- new card.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--global listDate, labelList, listVenueput field "date" into listDateput field "location" into listVenueput field "songs" into labelList--push this cardlock screengo to stack "Dead Labels"-- go card cardNameif findLabelByDate( listDate ) is false thenanswer "No labels. Shall we make 'em?" with "Cancel"¬or "Don't Bother!" or "OK"if it is "Cancel" thenpop cardexit mouseUpelse if it is "OK" thennewLabels( listDate )end ifend ifend mouseUp</script>
</part>
<part>
<id>65</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>5</left>
<top>292</top>
<right>76</right>
<bottom>314</bottom>
</rect>
<style>shadow</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Validate</name>
<script>-- This button will validate each song in the show list-- against the Songs stack for correctness. If it-- does not find a particular title, it will search the-- "Aka" field to see if there is some other name by which-- the song might be known, and will then allow you to-- convert it to the recorded title in Songs. If it-- can't find the song at all, it will allow you to-- skip it or correct it.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--validateShow emptyend mouseUp</script>
</part>
<part>
<id>69</id>
<type>button</type>
<visible> <false /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>70</left>
<top>145</top>
<right>88</right>
<bottom>161</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <false /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>30171</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Last Time</name>
<script>-- This button will send you to the most recently previous-- show in which the currently selected song was played.on mouseUpglobal selectedSongif the commandKey is down thendoHelpexit mouseUpend if--put false into tellDiffif the optionKey is down then put true into tellDiffset the cursor to 4lock screenput the number of this card into origNumput origNum into backUpif origNum > 50 thengo card origNum - 10 -- try the last 10 shows...findSong selectedSongif the number of this card is origNum then -- keep trying back furtherrepeat foreversubtract 100 from backUpif backUp < 0 then exit repeatgo card backUpfindSong selectedSongif the number of this card is not origNum then exit repeatend repeatend ifend ifif the number of this card is origNum thengo card 1 -- oh well, nice try. All the way backfindSong selectedSongif the number of this card is origNum thenanswer "This is the first time!"unlock screensetSongHilite selectedSongexit mouseUpend ifend ifput the number of this card into foundNum-- now march forward to the originalrepeat foreverfindSong selectedSongif the number of this card is origNum thengo card foundNumunlock screenif tellDiff is true thenset the lockScreen to falseanswer "It's been " & (origNum - the number of this card) & " shows!"end ifsetSongHilite selectedSongexit mouseUpend ifput the number of this card into foundNumgo next cardend repeatend mouseUp</script>
</part>
<part>
<id>70</id>
<type>button</type>
<visible> <false /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>293</left>
<top>145</top>
<right>307</right>
<bottom>161</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <false /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>2715</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Next Time</name>
<script>-- This button will send you to the next show in which the-- currently selected song was played. It will also report-- the number of shows elapsed between if you hold doen the-- optionKey when clicking.on mouseUpglobal selectedSongif the commandKey is down thendoHelpexit mouseUpend if--put false into tellDiffif the optionKey is down then put true into tellDiffset the cursor to watchlock screenput the number of this card into origNumrepeat forevergo next cardfindSong selectedSongif the number of this card <= origNum thengo card origNumanswer "This is the last time it was played!"unlock screensetSongHilite selectedSongexit mouseUpend if--go prev card -- this is the only way I can find...go next card -- ... to clear the selection rectangle from the find--if tellDiff is true thenanswer "It's been " & (the number of this card - origNum) & " shows!"end ifsetSongHilite selectedSongexit mouseUp-- end ifend repeatbeep 1end mouseUp</script>
</part>
<part>
<id>71</id>
<type>field</type>
<visible> <false /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <false /> </sharedText>
<fixedLineHeight> <true /> </fixedLineHeight>
<autoTab> <false /> </autoTab>
<lockText> <true /> </lockText>
<rect>
<left>88</left>
<top>146</top>
<right>276</right>
<bottom>160</bottom>
</rect>
<style>rectangle</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <false /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>9</textSize>
<textStyle>bold</textStyle>
<textHeight>12</textHeight>
<name>selected</name>
<script>on mouseDownlock screenset cursor to watchpush this cardput field "selected" into theSongif theSong is not empty thengo to stack "Songs"find theSong in field "title"if the result is empty thenput the id of this card into firstCardrepeat foreverif field "title" is theSong then exit mouseDowngo next cardfind theSong in field "title"if the id of this card is firstCard thenplay boingset the lockScreen to trueput "Well, it's close... :-}"exit mouseDownend ifend repeatend ifend ifplay "boing"pop cardend mouseDown</script>
</part>
<part>
<id>74</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>17</left>
<top>244</top>
<right>64</right>
<bottom>266</bottom>
</rect>
<style>shadow</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <false /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Edit</name>
<script>-- This button unlocks the songs field for entry/editing.-- When the field is re-locked the song count field-- is automatically re-counted.on mouseUpglobal preEditif the commandKey is down thendoHelpexit mouseUpend if--if the lockText of field "songs" is true thenset the hilite of the target to trueset the lockText of field "songs" to falseput field "date" & return & field "songs" & return into preEditset the cursor to watchput (item 1 of the rect of field "songs") +1 & "," &¬(item 2 of the rect of field "songs") + 1 into theLoc--click at theLocelseset the hilite of the target to falseif the optionKey is down thendelete line 1 of preEditdelete last line of preEditput preEdit into field "songs"elseupdateCounts preEdit, field "songs"end ifset the lockText of field "songs" to trueput countSongs() into field "total songs"end ifend mouseUpon updateCounts oldList, inNewListput empty into subListput empty into addListput return & inNewList into newListif line 1 of oldList is not field "date" then exit updateCounts--repeat with i = 2 to the number of lines in oldListif return & line i of oldList & return is not in newList thenput line i of oldList & return after subListend ifend repeat--repeat with i = 1 to the number of lines in newListif return & line i of newList & return is not in oldList thenput line i of newList & return after addListend ifend repeat---- Now adjust the counts...--push this cardset the lockScreen to trueget field "date"convert it to dateItemsput item 1 of it into theYeargo stack "Songs"--repeat with i = 1 to the number of lines in subListget line i of subListput "decrementing " & itcountSong it, theYear, -1end repeat--repeat with i = 1 to the number of lines in addListget line i of addListput "incrementing " & itcountSong it, theYear, 1end repeat--pop cardset the lockScreen to falseend updateCounts</script>
</part>
<part>
<id>75</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>369</left>
<top>317</top>
<right>393</right>
<bottom>341</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>26635</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Help</name>
<script>-- This button will get you general help... an overview-- of the cardon mouseUppush this cardgo card "Shows Help" of stack "Dead Utility"playDead "help"end mouseUp</script>
</part>
<part>
<id>77</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>11</left>
<top>268</top>
<right>70</right>
<bottom>290</bottom>
</rect>
<style>shadow</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Add...</name>
<script>-- This button will increment the syear count by one for each-- unique song in the shows list. It takes a little time.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--if the hilite of bg button "Don't Count" is true thenput "This show doesn't count!!!"exit mouseUpend ifanswer "Add these songs to the songs totals?"¬with "OK" or "Cancel"if it is "OK" thenlock screenset the cursor to 4addShowend ifend mouseUp</script>
</part>
<part>
<id>81</id>
<type>field</type>
<visible> <true /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <false /> </sharedText>
<fixedLineHeight> <true /> </fixedLineHeight>
<autoTab> <false /> </autoTab>
<lockText> <true /> </lockText>
<rect>
<left>479</left>
<top>47</top>
<right>495</right>
<bottom>64</bottom>
</rect>
<style>rectangle</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <false /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>12</textSize>
<textStyle>bold</textStyle>
<textHeight>16</textHeight>
<name>I Was There</name>
<script>on mouseUpif target is empty thenput "X" into the targetelseput empty into the targetend ifend mouseUp</script>
</part>
<part>
<id>83</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>42</left>
<top>27</top>
<right>60</right>
<bottom>43</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <false /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>30171</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Last Time Loc</name>
<script>-- This button will send you to the last show-- played at this venue. It relies on the consistancy-- of names used in the Place field, which is-- admitedly poor at this time.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--put false into tellDiffif the optionKey is down then put true into tellDiffset the cursor to watchlock screenput item 1 of field "location" into thisLocput the number of this card into origNumput origNum into backUpput "Finding last time played at " & thisLocif origNum > 50 thengo card origNum - 10 -- try the last 10 shows...find string thisLoc in field "location"if the number of this card is origNum then -- keep trying back furtherrepeat foreversubtract 100 from backUpif backUp < 0 then exit repeatgo card backUpfind string thisLoc in field "location"if the number of this card is not origNum then exit repeatend repeatend ifend ifif the number of this card is origNum thengo card 1 -- oh well, nice try. All the way backfind string thisLoc in field "location"if the number of this card is origNum thenanswer "This is the first time!"hide messageexit mouseUpend ifend ifput the number of this card into foundNum-- now march forward to the originalrepeat foreverfind string thisLoc in field "location"if the number of this card is origNum thengo card foundNumunlock screen with visual effect dissolveif tellDiff is true thenanswer "It's been " & (origNum - the number of this card) & " shows!"end ifhide messageexit mouseUpend ifput the number of this card into foundNumgo next cardend repeatend mouseUp</script>
</part>
<part>
<id>84</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>61</left>
<top>27</top>
<right>75</right>
<bottom>43</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <false /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>2715</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Next Time Loc</name>
<script>-- This button will send you to the next show to be-- played at this venue. It relies on the consistancy-- of names used in the Place field, which is-- admitedly poor at this time.on mouseUpif the commandKey is down thendoHelpexit mouseUpelse if the optionKey is down thenbeep 2exit mouseUpend if--put false into tellDiffif the optionKey is down then put true into tellDiffset the cursor to 4lock screenput item 1 of field "location" into nextLocput the number of this card into origNumput "Finding next time played at " & nextLocrepeat forevergo next cardfind string nextLoc in field "location"if the number of this card <= origNum thengo card origNumanswer "This is the last they played there!"hide messageexit mouseUpend if-- if theSong is in field "songs" then -- not necessary with find stringunlock screen with visual effect dissolveif tellDiff is true thenanswer "It's been " & (the number of this card - origNum) & " shows!"end ifhide messageexit mouseUp-- end ifend repeatend mouseUp</script>
</part>
<part>
<id>88</id>
<type>field</type>
<visible> <true /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <false /> </sharedText>
<fixedLineHeight> <true /> </fixedLineHeight>
<autoTab> <true /> </autoTab>
<lockText> <false /> </lockText>
<rect>
<left>85</left>
<top>69</top>
<right>372</right>
<bottom>108</bottom>
</rect>
<style>transparent</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <false /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font></font>
<textSize>9</textSize>
<textStyle>plain</textStyle>
<textHeight>12</textHeight>
<name>comments</name>
<script></script>
</part>
<part>
<id>92</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>425</left>
<top>308</top>
<right>464</right>
<bottom>342</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>20186</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Sort</name>
<script>-- This button will sort the cards in the stack by show date-- It also re-builds the internal card map that helps-- Stack-O-Dead find the first show of a given year. Use-- this button whenever you add or delete any cards, even if-- you don't thing you changed the sorted order.on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--sort datetime by field "date"put "Setting up first card map"setUpFirstOfYearend mouseUp</script>
</part>
<part>
<id>94</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>0</left>
<top>19</top>
<right>20</right>
<bottom>40</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <false /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>make new card</name>
<script>-- So you found it!!-- This button is a convenience for creating a new-- show card. It creates a new card and puts you in-- the date field.on mouseUpdoMenu "New Card"click at the loc of field "date"end mouseUp</script>
</part>
<part>
<id>90</id>
<type>field</type>
<visible> <false /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <true /> </sharedText>
<fixedLineHeight> <false /> </fixedLineHeight>
<autoTab> <false /> </autoTab>
<lockText> <true /> </lockText>
<rect>
<left>4</left>
<top>231</top>
<right>344</right>
<bottom>336</bottom>
</rect>
<style>rectangle</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <true /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>10</textSize>
<textStyle>bold</textStyle>
<textHeight>13</textHeight>
<name>misc commands</name>
<script>-- Eventually this mouse up script will accept a click on a line-- and execute the command, or at least put it...on mouseUphide the targetend mouseUp</script>
<script>-- This field indicates that the show is not to be used-- when calculating the year counts for songs, or in any-- of the statistics. It is generally set for things like-- an appearance of Bob and Jerry on Letterman or something-- which is notable here, but not really part of the Dead-- statistics.---- I do usually count things like the Saturday Night Live-- appearnaces since it is the Dead, and it was a live-- performance before an audience. DeadBase does not always-- count such performances. I also usually count the benefit-- type gigs where maybe one or two of the band members are not-- there, but only if it's mostly the Dead, and the material-- is generally from the "Dead Songbook".on mouseUpif the commandKey is down thendoHelpexit mouseUpend if--set the hilite of me to not the hilite of meif the hilite of me is true thenput "Statistically speaking, this show won't be counted."answer "Subtract these songs to the songs totals?"¬with "OK" or "Cancel"if it is "OK" thenlock screenset the cursor to 4subtractShowend ifelse-- if un-checking, offer to add the songs in...answer "Add these songs to the songs totals?"¬with "OK" or "Cancel"if it is "OK" thenlock screenset the cursor to 4addShowend ifend ifend mouseUp</script>
</part>
<part>
<id>95</id>
<type>field</type>
<visible> <false /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <true /> </sharedText>
<fixedLineHeight> <false /> </fixedLineHeight>
<autoTab> <false /> </autoTab>
<lockText> <false /> </lockText>
<rect>
<left>0</left>
<top>20</top>
<right>87</right>
<bottom>339</bottom>
</rect>
<style>scrolling</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <false /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>9</textSize>
<textStyle>plain</textStyle>
<textHeight>12</textHeight>
<name>first of year</name>
<script>on mouseUphide the targetend mouseUp</script>
</part>
<part>
<id>108</id>
<type>button</type>
<visible> <false /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>375</left>
<top>128</top>
<right>501</right>
<bottom>144</bottom>
</rect>
<style>transparent</style>
<showName> <true /> </showName>
<highlight> <true /> </highlight>
<autoHighlight> <false /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>ΓÇó Utility ΓÇó</name>
<script></script>
</part>
<part>
<id>109</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>161</left>
<top>329</top>
<right>216</right>
<bottom>342</bottom>
</rect>
<style>rectangle</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>9</textSize>
<textStyle>plain</textStyle>
<name>Clip</name>
<script>-- This button copies the setlist from the songs-- field to the clipboard so it can be pasted in other-- documents/files. It normally will clip the show date,-- venue, comments, and setlist in SOD format.---- Hold down the option key to get just the setliston mouseUpif the commandKey is down thendoHelpexit mouseUpend if--if the optionKey is down thenput empty into clipDataelseput bg field "date" & " " & bg field "location" & return into clipDataif bg field "comments" is not empty thenrepeat with i = 1 to the number of lines in bg field "comments"put "= " & line i of bg field "comments" & return after clipDataend repeatend ifput return after clipDataend iftextToScrap clipData & bg field "songs"end mouseUp</script>
</part>
<part>
<id>110</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>411</left>
<top>2</top>
<right>468</right>
<bottom>24</bottom>
</rect>
<style>shadow</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <false /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>= Year =</name>
<script>-- This is a popup menu of all years-- Click and hold for a pop-up menu of all years to date.-- Select a year from the menu and you will zip to the first-- show of that year. Wow!--on mouseDownglobal globYearList--if the commandKey is down thendoHelpexit mouseDownend if--put the rect of me into thePt-- put 10 into item 1 of thePtif globYearList is empty thenput ";1965;1966;1967;1968;1969" & ¬";1970;1971;1972;1973;1974;1975;1976;1977;1978;1979" & ¬";1980;1981;1982;1983;1984;1985;1986;1987;1988;1989" & ¬";1990;1991;1992;1993" ¬into globYearListget the dateconvert it to dateItemsput item 1 of it into endYearput 1994 into theYearrepeat while theYear <= endYearput ";" & theYear after globYearListadd 1 to theYearend repeat--end ifput popUp( thePt, globYearList ) into choice-- if it is 0, then no choice was made...if choice is not 0 thenput piece( globYearList, ";", (choice+1) ) into theYearset the hilite of me to falselock screengoFirstCardOfYear theYearend ifend mouseDown</script>
</part>
<content>
<layer>background</layer>
<id>90</id>
<text>validStack -- validates all shows, results to filegoFirstCardOfYear -- goes to first show of year</text>
<text>Help for bkgnd button "Clip"... This button copies the setlist from the songs field to the clipboard so it can be pasted in other documents/files. It normally will clip the show date, venue, comments, and setlist in SOD format. Hold down the option key to get just the setlist</text>
</content>
<name>Show Card</name>
<script>on mouseDownhideTheHiliteend mouseDownon closeCardhideTheHiliteset the scroll of field "songs" to 0end closeCardon miscshow field "misc commands"end miscon hideTheHilitelock screenhide bkgnd button "Last Time"hide bkgnd button "Next Time"select emptyhide field "selected"put empty into field "selected"end hideTheHiliteon hiliteLine songLineglobal selectedSonglock screenshowButtons songLine--select line songLine of bg field "songs"setSelect songLineput line songLine of bg field "songs" into selectedSongput line songLine of bg field "songs" into field "selected"end hiliteLineon setSongHilite theSongput the number of lines in field "songs" into numSongsrepeat with i = 1 to numSongsif line i of field "songs" is theSong thenhiliteLine iexit setSongHiliteend ifend repeatend setSongHiliteon selectSong songNumset the lockScreen to falseput the rect of field "selected" into theRectput item 2 of theRect + 7 into midLineshowButtons songNumend selectSongon setSelect songLineput the loc of field "songs" into setLocput line songLine of the target into field "selected"put (item 1 of setLoc - 8) & "," & midPoint(songLine) into theLocset the loc of field "selected" to theLocshow field "selected"-- select line songLine of the targetend setSelecton showButtons songLineput midPoint(songLine) into midLineput the rect of field "songs" into setRectput (item 1 of setRect - 8) & "," & midLine into theLocset the loc of bkgnd button "Last Time" to theLocshow bkgnd button "Last Time"put (item 3 of setRect + 6) & "," & midLine into theLocset the loc of bkgnd button "Next Time" to theLocshow bkgnd button "Next Time"end showButtonsfunction midpoint theLineput the rect of field "songs" into setRectput item 2 of setRect into setTopPixelput item 4 of setRect into setBottomPixel--put the textHeight of field "songs" into linePixelsput (linePixels * (theLine - 1)) - the scroll of field "songs"¬+ 7 + setTopPixel into midLine--if ( midLine > setBottomPixel ) thenput the scroll of field "songs" + (midLine - setBottomPixel) + 7¬into scrollPixelsset the scroll of field "songs" to scrollPixelssubtract ((midLine - setBottomPixel) + 7) from midLineend ifreturn midLineend midpoint-------------- Major Utility Functions --------------------on ImportShowsglobal yearSongs, showCount, deadDirput "Select a file name to import..."get FileName( "TEXT" )hide messageif it is empty then exit ImportShows--put it into theFileput "Importing file ... " & theFile---- we be inputin'--put 0 into totalSongsput 0 into showCountput false into validateanswer "Validate and add to songs stack? (slow)" with¬"Cancel" or "OK" or "Don't Bother"if it is "Cancel" then exit ImportShowsif it is "OK" then put true into validateset the cursor to 4-- set the lockScreen to trueimportFile theFile, validateset the lockScreen to falsebeep 3answer "Imported a total of" && showCount && "new shows"end ImportShowson importFile theFile, validateglobal yearSongs, showCount, deadDiropen file theFileput empty into showDateput "" into newSetput "" into notesput 0 into yearSongsput 0 into showSongsunlock screenrepeatshowBusyread from file theFile until returnif it is empty then -- end-of-fileif showDate is not empty thennewShow showDate, showloc, notes, songList, showSongs, validateend ifexit repeatelse if first char of it is "#" then -- display commentput it--wait 1 secondnext repeatelse if first char of it is "=" then -- add to notesdelete first char of itput trim(it) & return after notesnext repeatend ifif it is return thenif showSongs > 0 thenput "" & return into newSetelsenext repeatend ifend if-- need to trim off excess whitespace for Usenet habitsput Trim( ExpandTabs(it, 1) ) & return into recordget first word of recordif offset( char 1 of it, "0123456789" ) > 0 then -- new cardif showDate is not empty thennewShow showDate, showLoc, notes, songList, showSongs, validateend ifget first word of recordconvert it to short dateput it into showDatedelete first word of recordput empty into last character of recordif (char 1 of record is " ") then delete char 1 of recordput record into showLocput empty into songListput "" into newSetput "" into notesput 0 into showSongsadd 1 to showCountput "shows: " & showCountelseif record is not return thenput newSet & record after songListput empty into newSetadd 1 to showSongsend ifend ifend repeatclose file theFileend importFileon newShow showDate, showLoc, notes, songList, songCount, doValidatedomenu "New Card"put showDate into field "date"put showLoc into field "location"put notes into field "Comments"put songCount into field "total songs"put songList into field "songs"if doValidate is true thenvalidateShow empty-- addShowend ifend newShowon ExportShowspush this cardset the lockScreen to truego stack "Dead Utility"go to card "dump shows"set the lockScreen to falseend ExportShowson DeleteShowsask "delete from..."if the result is "Cancel" then exit DeleteShowsif it is not "." then convert it to short dateput it into fromCardask "...up to..." with fromCardif the result is "Cancel" then exit DeleteShowsconvert it to short dateput it into uptoCardif fromCard is "." thenput bkgnd field "date" into fromCardelsefind fromCard in bkgnd field "date"if the result is not empty thenanswer "None found!"exit DeleteShowsend ifend ifconvert fromCard to secondsconvert uptoCard to secondsput true into keepAskingrepeatget bkgnd field "date"convert it to secondsif it > uptoCard or it < fromCard then exit repeatif keepAsking is true thenanswer "Continue..." with "OK" or "Cancel" or "Don't bug me"if the result is "Cancel" then exit repeatif it is "Don't bug me" then put false into keepAskingend ifdoMenu "Delete Card"end repeatend DeleteShows-------------- Miscelaneous Functions ---------------------on dumpWasThereglobal deadDir, defFileCreatorask "Dump list to file..." with deadDirif it is empty then exit dumpWasThereput it into fileNameopen file fileNamelock screenpush this cardgo card 1find "X" in field "I Was There"if the result is not empty then exit dumpWasThereput field "date" into firstDaterepeat with i = 1 to the number of cardsshowBusywrite field "date" & " " & field "location" & return to file fileNamefind "X" in field "date"if field "date" is firstDate then exit repeatend repeatclose file fileNamesetFileType fileName, "TEXT", defFileCreatorend dumpWasThereon findSong theSongrepeat foreverfind string theSongif the result is not empty thenanswer "That song doesn't ring a bell..."exit findSongend ifif theSong is in field "songs" thenexit findSongend ifend repeatend findSongon replaceSong oldTitle, newTitleset the lockScreen to truego card 1find oldTitle in field "songs"if the result is empty thenput the id of this card into firstCardrepeat foreverput field "songs" into songListrepeat with index = 1 to 50if line index of field "songs" is oldTitle thenput newTitle into line index of field "songs"exit repeatend ifend repeatgo next cardfind oldTitle in field "songs"if the result is not empty or¬the id of this card is firstCard thenexit repeatend ifend repeatend ifend replaceSongon cleanShowpush this cardset the lockScreen to trueget field "date"convert it to dateItemsput item 1 of it into theYearput the number of field "songs" into songsFldrepeat with i = 1 to the number of lines in field songsFldget line i of field songsFldcleanSong it, theYear, -1end repeatpop cardset the lockScreen to falseanswer "Delete the card?" with "OK" or "NO!"if it is "OK" thendoMenu "Delete Card"end ifend cleanShowon addShowapplyShow 1end addShowon subtractShowapplyShow -1end subtractShowon applyShow theDeltapush this cardlock screenget field "date"convert it to dateItemsput field "songs" into songListput item 1 of it into theYearput return into newListgo stack "Songs"repeat with i = 1 to the number of lines in songListput Trim(line i of songList) into theSongif theSong is not empty thenif (return & theSong & return) is not in newList thenput theSongshowBusycleanSong theSong, theYear, theDeltaput theSong & return after newListend ifend ifend repeatpop cardend applyShowon cleanSong theSong, theYear, valfind string theSong in field "title"if the result is empty thenput the id of this card into firstCardrepeat foreverif field "title" is theSong thenchangeCount val, theYearexit repeatend ifgo next cardfind theSong in field "title"if the id of this card is firstCard then exit repeatend repeatend ifend cleanSongon validateShow fileNameglobal skipListput 0 into totProblemsput Trim( field "songs" ) into songListif the number of lines in songList is 0 thenput "No songs..."exit validateShowend ifput field "total songs" into songCountif fileName is not empty thenput return & field "date" && field "location" & return into showHeaderend ifput 0 into songsCheckedput 1 into songIndexset the lockScreen to truepush this cardput false into doUpdateset the cursor to 4go stack "Songs"-- do for number of songs plus some slush, never more than 50put 0 into firstIDrepeat while songsChecked < (songCount + 12) and songIndex < 50put line songIndex of songList into thisSongadd 1 to songIndexif thisSong is empty thennext repeatend ifadd 1 to songsCheckedput huntSong( thisSong, fileName ) into checkSong-- put old huntSong back hereif checkSong is empty thenbeep 2next repeatelse if checkSong is not thisSong thenput checkSong into line (songIndex - 1) of songListadd 1 to totProblemsend ifend repeatpop cardunlock screenif totProblems > 0 thenput totProblems && "songs changed!"put songList into field "songs"put songsChecked into field "total songs"elseput "No problems!"end ifend validateShowon validateTitles fileNameglobal bigSongListput 0 into totProblemsput Trim( field "songs" ) into songListif the number of lines in songList is 0 thenput "No songs..."exit validateTitlesend ifput field "total songs" into songCountput 0 into songsCheckedput 1 into songIndex--repeat while songsChecked < (songCount + 12) and songIndex < 50put line songIndex of songList into thisSongadd 1 to songIndexif thisSong is empty thennext repeatend ifadd 1 to songsCheckedif return & thisSong & return is not in bigSongList thenwrite thisSong & " - " & field "date" & return to file fileNameadd 1 to totProblemsend ifend repeatunlock screenif totProblems > 0 thenput totProblems && "problems!"elseput "No problems!"end ifend validateTitlesfunction huntSong theSong, fileNameglobal autoFixput empty into firstIDput empty into showHeader -- need to pass this in?put Trim( theSong ) into thisSongif thisSong is empty thenexit huntSongend ifrepeat forever -- outer function loopput false into doRetryrepeat forever -- look for this as the title...find thisSong in field "title"if the result is not empty then -- not found...exit repeatend ifif firstID is empty thenput the id of this card into firstIDelseif the ID of this card is firstID thenexit repeat -- didn't find it...end ifend ifif field "title" is thisSong thenreturn thisSong -- for sure!end ifgo next cardend repeatif fileName is not empty thenwrite "Not sure about ... '" & thisSong & "'" & return to file fileNameelseput "Not sure about ... '" & thisSong & "'"end ifput empty into firstIDrepeat forever -- now check for an alias...find thisSong in field "aka"if the result is not empty then -- if one IS NOT FOUNDexit repeatend ifif firstID is empty thenput the id of this card into firstIDelseif the ID of this card is firstID thenexit repeatend ifend ifput field "title" into realSongif autoFix is true thenif fileName is not empty thenwrite "Changining '" & thisSong & "' to " & realSong & return to file fileNameelseput "Changining " & thisSong & " to " & realSongend ifreturn realSongend ifanswer "Maybe it's ... " & quote & realSong & quote¬with "Yup!" or "Nope!"if it is "Yup!" thenput realSong into thisSongreturn realSongend ifgo next cardend repeat---- if we have reached here, we have a problemif fileName is empty thenrepeat foreveranswer "Don't recognize " & thisSong & "..." with¬"Skip" or "Create" or "Change"if it is "Skip" thenexit repeatelse if it is "Create" thendoMenu "New Card"put thisSong into field "title"exit repeatelse if it is "Change" thenput thisSong into oldSongask "What is the correct title?" with thisSongif it is empty then exit repeatput it into thisSongput true into doRetryexit repeatend ifend repeatelse -- we have a fileName, use it!-- play boingwrite showHeader & thisSong & return to file fileNameput empty into showHeaderend ifif not doRetry then return thisSong -- if I get this far, it's OKend repeatend huntSongon validFileglobal deadDir, defFileCreatorask "Validate show to file:" with deadDirif it is empty then exit validFileput it into fileNameopen file fileNamevalidateShow fileNameclose file fileNamesetFileType fileName, "TEXT", defFileCreatorend validFile-- This handler will validate the entire stack. It tries to use a file-- in your default directory called "songList" which contains a list-- of valid song titles in alphabetical order. You should generate-- such a file from the Songs stack using the Export (titles only)-- function.--on validStackglobal bigSongList, deadDir, defFileCreatorask "Validate show to file:" with deadDirif it is empty then exit validStackput it into fileNameput return into bigSongListput deadDir & ":songList" into listFileopen file listFilerepeat foreverread from file listFile until returnif it is empty then exit repeatput it after bigSongListend repeatclose file listFilebeep 3open file fileNamewrite "Starting at ... " & field "date" & return to file fileNamepush this card-- go card 1repeat for the number of cardsvalidateTitles fileNamego next cardend repeatclose file fileNamesetFileType fileName, "TEXT", defFileCreatorpop cardend validStackon finishYearglobal autoFix, deadDir, defFileCreatorput autoFix into localFixput true into autoFixpush this cardput field "date" into theDateput piece( theDate, "/", 3 ) into startYearput "Doing rest of year '" & startYearput deadDir & "validate" & startYear into theFileopen file theFilerepeat for the number of cardsput theDatewrite theDate & ":" & return to file theFilevalidateShow theFilego next cardput field "date" into theDateput piece( theDate, "/", 3 ) into yearif year is not startYear then exit repeatend repeatclose file theFilesetFileType theFile, "TEXT", defFileCreatorput localFix into autoFixpop cardend finishYearon checkDupsglobal deadDir, defFileCreatorpush this cardput deadDir & ":duplicates" into fileNameopen file fileNamego card 1repeat for the number of cardsput findDups( field "songs" ) into theDupsif theDups is not empty thenwrite field "date" & ": " & theDups & return to file fileNameend ifgo next cardend repeatclose file fileNamesetFileType fileName, "TEXT", defFileCreatorpop cardend checkDupsfunction findDups theListput empty into outListput empty into theDupsrepeat with i = 1 to the number of lines in theListif line i of theList is in outList thenput line i of theList & "," after theDupsend ifput line i of theList after outListend repeatreturn theDupsend findDupson countAllrepeat for the number of cardsput countSongs() into theCountif theCount is not field "total songs" thenbeep 2put field "date" & " - old: " & field "total songs" &¬", new: " & theCountput theCount into field "total songs"end ifgo next cardend repeatend countAllfunction countSongsput empty into outListput field "songs" into songListput 0 into songCountrepeat with i = 1 to the number of lines in songListshowBusyif line i of songList is not empty then-- don't count duplicates within a show...if line i of songList is not in outList thenput line i of songList after outListadd 1 to songCountend ifend ifend repeatreturn songCountend countSongson updateCountsrepeat for the number of cardscountSongsgo next cardend repeatend updateCountson fixitglobal autoFixanswer "Use auto-fix...?" with "OK" or "No"if it is "OK" thenput true into autoFixelseput false into autoFixend ifend fixit-- the bg field "first of year" contains a list of years and the-- number of the first card for that year. following is a setup-- routine for the data in this field, which should rarely change,-- and the goToFirstOfYear handler which uses iton setUpFirstOfYearpush this cardlock screengo card 1put piece( field "date", "/", 3 ) into firstYearput firstYear & ":1" & return into theListgo last cardput piece( field "date", "/", 3 ) into finalYearrepeat with year = firstYear + 1 to finalYearshowBusy-- put " " & year after the messagefind ("/" & year) in field "date"-- if the result is not empty then exit repeatput year & ":" & the number of this card & return after theListend repeatput theList into bg field "first of year"pop cardend setUpFirstOfYearon goFirstCardOfYear theYearif ( theYear > 1900 ) then put theYear - 1900 into theYearrepeat with i = 1 to the number of lines in field "first of year"put line i of field "first of year" into theLineif ( piece( theLine, ":", 1 ) is theYear ) thenput piece( theLine, ":", 2 ) into theCardexit repeatend ifend repeatgo card theCardend goFirstCardOfYearon findSoundStackglobal soundStackpush this cardgo card "Dead Config" of stack "Dead Utility"put card field "Sound Stack" into soundStackpop cardput "Using sounds in ... " & soundStackend findSoundStack-- Used to clean up for distribution--on setForReleaseset the cursor to watchgoFirstCardOfYear 1974put "Set up stack for release..."if field "date" is not "2/22/74" thenput "Something is not quite right..."exit setForReleaseend ifput the number of this card - 1 into delCardsgo card 1answer "This will delete " & delCards & "cards..." with "Go For It" or "Cancel"if it is "Go For It" thenanswer "Are you REALLY SURE?..." with "YES" or "Cancel"if it is not "YES" then exit setForReleaseput "Deleting " & delCards & " cards..."repeat for delCardsgo card 1showBusydoMenu "Delete Card"end repeat-- unsetWasTheresetUpFirstOfYear-- doMenu "Compact Stack"end ifend setForReleaseon unsetWasThereput 0 into showCountrepeat foreverfind "X" in field "I Was There"if the result is not empty then exit repeatput empty into field "I Was There"add 1 to showCountend repeatanswer "Cleared " & showCOunt & " shows!"end unsetWasThereon badVoodoput the number of this card into startCardput "Delete card " & the number of this card ¬& " through card " & the number of cards & "?" into thePromptanswer thePrompt with "You Bet!" or "Cancel"if it is "You Bet!" thenanswer "Are You sure??" with "You Bet!" or "Cancel"if it is "You Bet!" thenrepeat while the number of this card >= startCarddoMenu "Delete Card"put the number of this cardend repeatend ifend ifend badVoodo</script>